import commander from 'commander'
import inquirer from 'inquirer'
import shell from 'shelljs'

// 解析命令行参数为 options对象
function parseArgumentsIntoOptions(rawArgs) {
    const program = new commander.Command();

    /*
    第一个参数:命令行参数及其别名
    第二个参数: 描述
    第三个参数: 默认值
    */
    program
        .option('-g, --git', '自动初始化git仓库', false)
        .option('-y, --yes', '使用默认模板则直接返回', false)
        .option('--typescript', '使用typescript', false)
        .option('--less', '使用less', false)

    program.parse(process.argv);

    const options = program.opts();

    return options
}

async function promptForMissingOptions(options) {
    // 默认使用 JavaScript 模板
    const defaultTemplate = 'JavaScript';
    // 使用默认模板则直接返回(执行 create-react-app -y的时候)
    if (options.yes) {
        return {
            ...options,
            template: defaultTemplate,
        };
    }
    // 准备交互式问题 (执行 create-react-app 的时候)
    const questions = [];
    if (!options.yes) {
        questions.push({
            type: 'list',
            name: 'template',
            message: '🧳请选择一个模板',
            choices: ['JavaScript', 'TypeScript'],
            default: defaultTemplate,
        });
    }
    if (!options.git) {
        questions.push({
            type: 'confirm',
            name: 'git',
            message: '🧵初始化一Git仓库?',
            default: false,
        });

        if (!shell.which('git')) {
            shell.echo('Sorry, this script requires git');
            shell.exit(1);
        }

        shell.exec('git clone https://gitee.com/nsusoft/React.WebApp.git')

        shell.cd('React.WebApp/');
        shell.cp('-R', 'React.WebApp/', '/');
        // shell.rm('-rf', 'React.WebApp');


    }

    // 使用 inquirer 进行交互式查询，并获取用户答案选项
    const answers = await inquirer.prompt(questions);

    return {
        ...options,
        template: options.template || answers.template,
        git: options.git || answers.git,
    };
}

export async function cli(args) {
    // 获取命令行配置
    let options = parseArgumentsIntoOptions(args);
    const res = await promptForMissingOptions(options)

    console.log(res);

}